原始题目:剑指 Offer 61. 扑克牌中的顺子 (opens new window)
解题思路:
如果要组成顺子,那最大的点数和最小的点数之差不能超过 。
可以将数组排序,然后计算除了 之外的最大值和最小值,判断点数之差是否超过 。
代码:
public boolean isStraight(int[] nums) {
int joker = 0;
Arrays.sort(nums);
for (int i = 0; i < 4; i++) {
if (nums[i] == 0) {
// 统计大小王数量
joker++;
} else if (nums[i + 1] == nums[i]) {
// 若有重复,提前返回 false
return false;
}
}
// 最大牌 - 最小牌 < 5 则可构成顺子
return nums[4] - nums[joker] < 5;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
复杂度分析
- 时间复杂度:因为数组的大小恒等于 5 。
- 空间复杂度:辅助变量占用常数大小的额外空间。